# -*- coding: utf-8 -*-
'''
通过接收celery的请求,来进行处理
在处理的过程中，接收过程中等待处理的结果
处理完成后.返回相应的结果,并由celery来进行后续的处理
这个方式就是为了增加模型的并发处理能力
不需要多个进程重复加载模型；以减少对于GPU资源的占用，
增加系统的并发处理能力；
这么做的目的是通过gunicorn来定义加载模型，
一个进程要加载一个模型，如果实现并发的话，需要一个GPU要加载多个进程和模型，
所以使用这个方式来实现；一个celery的进程可以发布二个任务请求给一个gunicorn的进程；
'''
from flask import Flask
from flask import render_template, redirect, url_for, request, jsonify, g
import pubfunc
import returnJson
import json
from asrTask import asrTaskClass

logger = pubfunc.getLogger()
asrTaskApi = Flask(__name__)

@asrTaskApi.route('/AsrTaskApi', methods=['GET', 'POST'])
def asrRoutineAdd():

    if request.method == 'GET':
       return jsonify(returnJson.error(msg=f"请使用Post方法提交;"))
    data = request.json
    video = data.get("videopath", "")
    tmd5 = data.get("tmd5")
    uuid1 = data.get("uuid1")
    asrtask = asrTaskClass(video, tmd5, uuid1, enflag=False)
    result =  asrtask.Execute()
    return result

# 更新字幕内容
@asrTaskApi.route('/updateSubtitle', methods=['GET', 'POST'])
def updateSubtitle():

    if request.method == 'GET':
       response = jsonify({"message": "方法错误，请使用POST方法"})  
       response.status_code = 400
       return response

    data = request.json
    if(data == None):
       response = jsonify({"message": "数据请求错误"})  
       response.status_code = 401
       return response
    subpath = data["subpath"]
    subtitle = data["subtitle"]
    try:
        with open(subpath, "w+", encoding='utf-8') as f:
            json.dump(subtitle, f, ensure_ascii=False, indent=4)
        response = jsonify({"message": "数据处理成功"})  
        response.status_code = 200
        return response  
    except Exception as e:
        response = jsonify({"message": str(e)})  
        response.status_code = 400
        return response  
        

if __name__ == '__main__':  
    # asrTaskApi.run()
    asrTaskApi.run(debug=True, port=2587, host='0.0.0.0')
    pass